\documentclass[12pt,a4paper]{article}
\usepackage{fontspec}
\usepackage{graphicx}
\usepackage{xeCJK}
\setmainfont{SimSun}
\title{LLVM程序员手册}
\author{原作者：\\译者：张祖羽@HEU\\译文版本：0.11}

\begin{document}
\maketitle

\section{简介}

该文档打算突出LLVM代码基础中重要的类和接口。该指南并不试图解释什么是LLVM，它怎么工作，以及LLVM代码规范。它假定读者知道LLVM基础且对写转换、分析或操作代码感兴趣。

该文档会带给读者方向，使读者能以自己的方式持续增加构建LLVM基础构架的源代码。记住，该指南并不试图充当代替读源码的角色，因此如果你认为这些类中应该有完成某事的方法，但没列出，请检查源码。提供对doxygen源码的链接，可尽可能容易地检查代码。

该文档的第一节描述了对理解LLVM基础构架有用的通用信息，第二节描述了核心LLVM类。将来，该指南将包含怎样使用扩展库，例如控制（dominator）信息、CFG遍历例程和类似InstVisitor模块等有用工具。

\section{通用信息}

该节包含对理解LLVM源码基础有用但不针对任何特定API的通用信息。

\subsection{C++标准模板库}

LLVM大量使用C++标准模板库（STL），可能远超过你过去使用或见过的量。因此，你可能想完成一点关于STL技术使用和能力的背景阅读。这里有许多很好讨论STL的网页，和许多关于该主题的书籍，故STL在此不讨论。

这有一些有用的链接

\begin{enumerate}
\item
\begin{description}
\item[纯粹的C++库引用]
\end{description}
\end{enumerate}

\subsection{其它有用的引用}

\begin{enumerate}
\item 使用跨平台的静态库和共享库
\end{enumerate}

\section{重要且有用的LLVM API}

\subsection{isa<>, cast<>和dyn\_cast<>模板}

\subsection{传递字符串（StringRef和Twine类）}

\subsubsection{StringRef类}

\subsubsection{Twine类}

\subsection{DEBUG()宏和 -debug 选项}

\subsubsection{具有DEBUG\_TYPE和 -debug-only 选项的细粒度调试信息}

\subsection{Statistic类和 -stats 选项}

\subsection{调试代码的图查看}

\section{选取任务的正确数据结构}

\subsection{顺序容器（std::vector, std::list等）}

\subsubsection{固定大小数组}

\subsubsection{堆分配的数组}

\subsubsection{"llvm/ADT/SmallVector.h"}

\subsubsection{<vector>}

\subsubsection{<deque>}

\subsubsection{<list>}

\subsubsection{llvm/ADT/ilist.h}

\subsubsection{其它顺序容器选项}

\subsection{类Set容器（std::set, SmallSet, SetVector等）}

\subsubsection{排序的'vector'}

\subsubsection{"llvm/ADT/SmallSet.h"}

\subsubsection{"llvm/ADT/SmallPtrSet.h"}

\subsubsection{"llvm/ADT/DenseSet.h"}

\subsubsection{"llvm/ADT/FoldingSet.h"}

\subsubsection{<set>}

\subsubsection{"llvm/ADT/SetVector.h"}

\subsubsection{"llvm/ADT/UniqueVector.h"}

\subsubsection{其它的类Set容器选项}

\subsection{类Map容器（std::map, DenseMap等）}

\subsubsection{排序的'vector'}

\subsubsection{"llvm/ADT/StringMap.h"}

\subsubsection{"llvm/ADT/IndexedMap.h"}

\subsubsection{"llvm/ADT/DenseMap.h"}

\subsubsection{"llvm/ADT/ValueMap.h"}

\subsubsection{<map>}

\subsubsection{其它的类Map容器选项}

\subsection{类String容器}

\subsection{类BitVector容器}

\subsubsection{密集型位向量}

\subsubsection{"小的"密集型位向量}

\subsubsection{稀疏型位向量}

\section{通用操作的有用提示}

\subsection{基本的检查和遍历例程}

\subsubsection{函数的基本块迭代}

\subsubsection{基本块的指令迭代}

\subsubsection{函数的指令迭代}

\subsubsection{将迭代器转为类指针}

\subsubsection{发现调用位置：更复杂的示例}

\subsubsection{视call和invoke为同类}

\subsubsection{def-use 和 use-def 链的迭代}

\subsubsection{块的前趋和后继的迭代}

\subsection{完成简单的更改}

\subsubsection{创建和插入指令}

\subsubsection{删除指令}

\subsubsection{使用其它值替代指令}

\subsubsection{删除全局变量}

\subsection{怎样创建类型}

\section{线程和LLVM}

\subsection{进入和退出多线程模式}

\subsection{使用llvm\_shutdown()结束执行}

\subsection{使用ManagedStatic的Lazy初始化}

\subsection{使用LLVMContext实现隔离}

\subsection{线程和JIT}

\section{高级主题}

\subsection{LLVM类型辨析}

\subsubsection{基本的递归类型构造}

\subsubsection{refineAbstractTypeTo方法}

\subsubsection{PATypeHolder类}

\subsubsection{AbstractTypeUser类}

\subsection{ValueSymbolTable和TypeSymbolTable类}

\subsection{User类及其拥有的类的内存布局}

\section{核心LLVM类层级参考}

\subsection{Type类}

\subsection{Module类}

\subsection{Value类}

\subsubsection{User类}

\subsubsubsection{Instruction类}

\subsubsubsection{Constant类}

\subsubsubsubsection{GlobalValue类}

\subsubsubsubsubsection{Function类}

\subsubsubsubsubsection{GlobalVariable类}

\subsubsection{BasicBlock类}

\subsubsection{Argument类}


\begin{itemize}
\item 计算机主要用于科学计算
\end{itemize}

\begin{description}
\item[数据完整性] 保证数据库中数据始终是正确的。
\end{description}

\begin{enumerate}
\item 数据库系统概念.Silberschatz等.机械工业出版社.第五版.杨冬青等译
\end{enumerate}

\end{document}
